#ifndef __HEAD_H__
#define __HEAD_H__

// 用户信息结构体
typedef struct User
{
    char username[20]; // 用户名
    char password[20]; // 密码
} User;
// 用户信息链表节点
typedef struct UserNode
{
    User user;             // 用户信息
    struct UserNode *next; // 下一个节点

} UserNode;
// 用户信息链表
typedef struct UserList
{
    UserNode *head; // 头节点
    int size;       // 链表大小

} UserList;

// 商品信息结构体
typedef struct Commodity
{
    char id[64];   // 商品编号
    char name[20]; // 商品名称
    float price;   // 商品价格
    int stock;     // 库存数量

} Commodity;
// 商品信息链表节点
typedef struct CommodityNode
{
    Commodity commodity;        // 商品信息
    struct CommodityNode *next; // 下一个节点

} CommodityNode;
// 商品信息链表
typedef struct CommodityList
{
    CommodityNode *head; // 头节点
    int size;            // 链表大小
    
} CommodityList;

// 导入项目头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "list.h"
#include "commodity.h"
#include "utils.h"
#include "user.h"
#include "file.h"

char username[20];  // 用户名定义，方便区分每个用户的购物车


// 定义宏定义
#define ADM "1"                                                    // 管理员用户名
#define PWD "1"                                                 // 管理员密码
#define LOG_FILE "./Commodity_management/log/error.log"                // 报错日志文件
#define COMMODITIES_FILE "./Commodity_management/data/commodities.txt" // 商品信息文件
// 修改为动态生成带用户名的文件名
#define SHOPPING_CART_FILE(username) "./Commodity_management/data/" username ".txt"

#define USER_FILE "./Commodity_management/data/user.txt"               // 用户信息文件

// 定义颜色宏
#define RED(str)     "\033[31m" str "\033[0m"
#define GREEN(str)   "\033[32m" str "\033[0m"
#define YELLOW(str)  "\033[33m" str "\033[0m"
#define BOLD(str)    "\033[1m" str "\033[0m"
#define YELLOW_BOLD(str) "\033[1;33m" str "\033[0m"
#define CYAN(str)    "\033[1;36m" str "\033[0m"

// 定义列宽
#define ID_WIDTH 12
#define NAME_WIDTH 16
#define PRICE_WIDTH 12
#define STOCK_WIDTH 12


#endif
